前言
在上篇《进阶篇:好用的工具(上)》中,我们已经介绍了一部分工具。
在这文中,我们将介绍剩下的那些工具。
注意:以下所有示例均以 Macos 环境为例
execa
通过这个工具,我们可以在代码里执行命令行指令。
安装
1 | npm install execa |
使用
1 | const execa = require('execa') |
有关Node知识的一些介绍可以看一下《基础篇:Node知识储备》
在本文中为了方便演示 我们使用5.1.1版本
我们甚至可以用来做一些git
操作
1 | execa('git',['clone','https://github.com/varletjs/varlet.git']).stdout.pipe(process.stdout); |
讲到这里,相信聪明的你已经想到了一个最简单的实现
cli
的方式,那就是通过命令行直接从远端将项目模板拉过来
对应的git命令可以使用
1 | git clone -b [branch] [repo url] [folderName/user input] |
ora
在项目创建的过程中,难免会遇到等待的情况。
以上面我们执行git clone
为例,详细不少小伙伴们已经尝试过了,是不是发现在clone
的过程中一点提示都没有,体验上非常的不友好。
这个时候我们就可以使用ora
来加上一个过程动画。
安装
1 | npm install ora |
使用
我们依旧以上面git clone
为例
1 | const ora = require('ora'); |
当你的命令行中出现如下的这样一个小东西的时候,说明你的ora
已经成功运作了
加载完成提示
fs-extra
node
本身提供了fs
模块,但用起来多有不便。
相比较而言fs-extra
这个库用起来就方便多了,添加了未包含在原生fs
模块中的文件系统方法,并向fs
方法添加了promise支持。不过需要使用node
的版本为10.12.0版本或以上。
在祖师爷的
vue-next
中也使用了此库
安装
1 | npm install fs-extra |
常见用法
copy 复制
1 | fs.copy('myfile.js', 'mynewfile.js', err => { |
ensureDir 创建目录
确保目录的存在。如果目录结构不存在,就创建一个。
1 | fs.ensureDir('./src') |
createWriteStream 可写流
1 | const writer = fs.createWriteStream('./myfile.txt') |
这个时候就有细心的小伙伴发现了,我们改变要写的内容,每次都会将全部内容重写,那如何才能接在已有的内容后继续写入呢?
别急,这不就来了嘛~
1 | const writer = fs.createWriteStream('./myfile.txt',{ flags:'a' }) |
outputFile 写入文件
这个方法乍一看与writeFile
类似,区别在于,当要写入的文件不存在时,该方法会创建一个目标文件。
1 | fs.outputFile('mynewfile.txt', 'hello varlet!') |
remove 删除
1 | fs.remove('anotherfile.txt', function(err) { |
pathExists 路径检查
1 | fs.pathExists('index.js', (err, exists) => { |
readdir 读取文件目录
1 | fs.readdir('src',(err,files)=>{ |
slash
用于转换 Windows 反斜杠路径转换为正斜杠路径 \ => /
安装
1 | npm install slash |
使用
1 | const string = path.join('foo', 'bar'); |
hash-sum
超快的独特哈希生成器。
祖师爷的
vue-next
中我们也可以看到此库的身影
安装
1 | npm i hash-sum -S |
使用
1 | const hash = require('hash-sum'); |
在
varlet-cli
中我们用它来处理style scoped
chokidar
我们使用chokidar
来监控文件变化
安装
1 | npm install chokidar |
使用
1 | chokidar.watch('.').on('all', (event, path) => { |
详细已经有聪明的小伙伴联想到了
dev
模式下,我们完成文件的改动会完成服务的重启,其实正是利用了这个工具库
最后
以上,有关cli
用到的工具的介绍先告一段落, 更多的用法可以见各工具的官方文档。